//异步编程（文件的读取、Ajax等等）解决方案：
const fs = require('fs') //引入node.js中的本地文件扩展模块

// //执行异步操作
// //第一个参数：读取文件的路径
// //第二个参数：读取过程中对响应结果的处理
// fs.readFile('./他.txt', (err, data) => {
//   //无论参数名是什么，第一个参数表示文件读取失败，第二个参数表示文件读取成功
//   //当文件读取失败时的错误对象
//   if (err) {
//     console.log('文件读取失败')
//     return
//   }
//   //data：当文件读取成功时的文件内容（16进制数形式），用toString转换成字符
//   console.log(data.toString())
// })

//实例化Promise
//Promise对象有三个状态：（默认）初始化、成功、失败
//resolve，reject：函数类型的参数，可以将promise的状态分别设置为成功，失败
const p = new Promise((resolve, reject) => {
  //执行异步操作
  //第一个参数：读取文件的路径
  //第二个参数：读取过程中对响应结果的处理
  fs.readFile('./他.txt', (err, data) => {
    //无论参数名是什么，第一个参数err表示文件读取失败，第二个参数data表示文件读取成功
    //当文件读取失败时的错误对象
    if (err) {
      reject(err) //将promise的状态改为失败
    }
    //data：当文件读取成功时的文件内容（16进制数形式），用toString转换成字符
    resolve(data) //将promise的状态改为成功
  })
}) //函数类型的参数

// p.then 当Promise的状态为成功时，then被调用
// p.catch 当Promise的状态为失败时，catch被调用
//返回的都是p对象，可以串联写
p.then((response) => {
  //回调函数内自动注入的参数 按传统写response，写data也行（其实就是data）
  //成功业务逻辑
  console.log(response.toString())
}).catch((error) => {
  //失败业务逻辑
  console.log('出错了')
  console.log(error)
})
